<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        // 1. 面向对象的格式
        // 把属性放在构造函数里面，把方法放在原型上

        // 为什么要用构造函数？
        // 在创建实例的时候，让实例拥有类的概念
        function Person(name, age) {
            this.name = name;
            this.age = age
        }

        // 为什么要用原型？
        // 解决了函数过载的问题，当实例大量创建的时候会创建多个相同的方法，造成资源浪费
        // 实例能够天然的访问到原型中的属性或者方法, 原型是每个函数自带的对象
        Person.prototype.sayHi = function () {
            console.log(this.name);
        }

        // 检测实例是否由指定的类创建
        // p1 instanceof Person
        var p1 = new Person('张三', 28);

    </script>
</body>

</html>